{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# Optional Lab: Logistic Regression\n",
    "\n",
    "In this ungraded lab, you will \n",
    "- explore the sigmoid function (also known as the logistic function)\n",
    "- explore logistic regression; which uses the sigmoid function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "%matplotlib widget\n",
    "import matplotlib.pyplot as plt\n",
    "from plt_one_addpt_onclick import plt_one_addpt_onclick\n",
    "from lab_utils_common import draw_vthresh\n",
    "plt.style.use('./deeplearning.mplstyle')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Sigmoid or Logistic Function\n",
    "<img align=\"left\" src=\"./images/C1_W3_LogisticRegression_left.png\"     style=\" width:300px; padding: 10px; \" >As discussed in the lecture videos, for a classification task, we can start by using our linear regression model, $f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) = \\mathbf{w} \\cdot  \\mathbf{x}^{(i)} + b$, to predict $y$ given $x$. \n",
    "- However, we would like the predictions of our classification model to be between 0 and 1 since our output variable $y$ is either 0 or 1. \n",
    "- This can be accomplished by using a \"sigmoid function\" which maps all input values to values between 0 and 1. \n",
    "\n",
    "\n",
    "Let's implement the sigmoid function and see this for ourselves.\n",
    "\n",
    "## Formula for Sigmoid function\n",
    "\n",
    "The formula for a sigmoid function is as follows -  \n",
    "\n",
    "$g(z) = \\frac{1}{1+e^{-z}}\\tag{1}$\n",
    "\n",
    "In the case of logistic regression, z (the input to the sigmoid function), is the output of a linear regression model. \n",
    "- In the case of a single example, $z$ is scalar.\n",
    "- in the case of multiple examples, $z$ may be a vector consisting of $m$ values, one for each example. \n",
    "- The implementation of the sigmoid function should cover both of these potential input formats.\n",
    "Let's implement this in Python."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "NumPy has a function called [`exp()`](https://numpy.org/doc/stable/reference/generated/numpy.exp.html), which offers a convenient way to calculate the exponential ( $e^{z}$) of all elements in the input array (`z`).\n",
    " \n",
    "It also works with a single number as an input, as shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Input to exp: [1 2 3]\n",
      "Output of exp: [ 2.72  7.39 20.09]\n",
      "Input to exp: 1\n",
      "Output of exp: 2.718281828459045\n"
     ]
    }
   ],
   "source": [
    "# Input is an array. \n",
    "input_array = np.array([1,2,3])\n",
    "exp_array = np.exp(input_array)\n",
    "\n",
    "print(\"Input to exp:\", input_array)\n",
    "print(\"Output of exp:\", exp_array)\n",
    "\n",
    "# Input is a single number\n",
    "input_val = 1  \n",
    "exp_val = np.exp(input_val)\n",
    "\n",
    "print(\"Input to exp:\", input_val)\n",
    "print(\"Output of exp:\", exp_val)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "The `sigmoid` function is implemented in python as shown in the cell below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    \"\"\"\n",
    "    Compute the sigmoid of z\n",
    "\n",
    "    Args:\n",
    "        z (ndarray): A scalar, numpy array of any size.\n",
    "\n",
    "    Returns:\n",
    "        g (ndarray): sigmoid(z), with the same shape as z\n",
    "         \n",
    "    \"\"\"\n",
    "\n",
    "    g = 1/(1+np.exp(-z))\n",
    "   \n",
    "    return g"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "Let's see what the output of this function is for various value of `z`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Input (z), Output (sigmoid(z))\n",
      "[[-1.000e+01  4.540e-05]\n",
      " [-9.000e+00  1.234e-04]\n",
      " [-8.000e+00  3.354e-04]\n",
      " [-7.000e+00  9.111e-04]\n",
      " [-6.000e+00  2.473e-03]\n",
      " [-5.000e+00  6.693e-03]\n",
      " [-4.000e+00  1.799e-02]\n",
      " [-3.000e+00  4.743e-02]\n",
      " [-2.000e+00  1.192e-01]\n",
      " [-1.000e+00  2.689e-01]\n",
      " [ 0.000e+00  5.000e-01]\n",
      " [ 1.000e+00  7.311e-01]\n",
      " [ 2.000e+00  8.808e-01]\n",
      " [ 3.000e+00  9.526e-01]\n",
      " [ 4.000e+00  9.820e-01]\n",
      " [ 5.000e+00  9.933e-01]\n",
      " [ 6.000e+00  9.975e-01]\n",
      " [ 7.000e+00  9.991e-01]\n",
      " [ 8.000e+00  9.997e-01]\n",
      " [ 9.000e+00  9.999e-01]\n",
      " [ 1.000e+01  1.000e+00]]\n"
     ]
    }
   ],
   "source": [
    "# Generate an array of evenly spaced values between -10 and 10\n",
    "z_tmp = np.arange(-10,11)\n",
    "\n",
    "# Use the function implemented above to get the sigmoid values\n",
    "y = sigmoid(z_tmp)\n",
    "\n",
    "# Code for pretty printing the two arrays next to each other\n",
    "np.set_printoptions(precision=3) \n",
    "print(\"Input (z), Output (sigmoid(z))\")\n",
    "print(np.c_[z_tmp, y])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "The values in the left column are `z`, and the values in the right column are `sigmoid(z)`. As you can see, the input values to the sigmoid range from -10 to 10, and the output values range from 0 to 1. \n",
    "\n",
    "Now, let's try to plot this function using the `matplotlib` library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …",
      "image/png": "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",
      "text/html": "\n            <div style=\"display: inline-block;\">\n                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n                    Figure\n                </div>\n                <img src='' width=500.0/>\n            </div>\n        ",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "5044dd9e80614568a1b86dcd2c71d14e"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot z vs sigmoid(z)\n",
    "fig,ax = plt.subplots(1,1,figsize=(5,3))\n",
    "ax.plot(z_tmp, y, c=\"b\")\n",
    "\n",
    "ax.set_title(\"Sigmoid function\")\n",
    "ax.set_ylabel('sigmoid(z)')\n",
    "ax.set_xlabel('z')\n",
    "draw_vthresh(ax,0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "As you can see, the sigmoid function approaches  `0` as `z` goes to large negative values and approaches `1` as `z` goes to large positive values.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Logistic Regression\n",
    "<img align=\"left\" src=\"./images/C1_W3_LogisticRegression_right.png\"     style=\" width:300px; padding: 10px; \" > A logistic regression model applies the sigmoid to the familiar linear regression model as shown below:\n",
    "\n",
    "$$ f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) = g(\\mathbf{w} \\cdot \\mathbf{x}^{(i)} + b ) \\tag{2} $$ \n",
    "\n",
    "  where\n",
    "\n",
    "  $g(z) = \\frac{1}{1+e^{-z}}\\tag{3}$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "  \n",
    "Let's apply logistic regression to the categorical data example of tumor classification.  \n",
    "First, load the examples and initial values for the parameters.\n",
    "  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": [],
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "x_train = np.array([0., 1, 2, 3, 4, 5])\n",
    "y_train = np.array([0,  0, 0, 1, 1, 1])\n",
    "\n",
    "w_in = np.zeros((1))\n",
    "b_in = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "Try the following steps:\n",
    "- Click on 'Run Logistic Regression' to find the best logistic regression model for the given training data\n",
    "    - Note the resulting model fits the data quite well.\n",
    "    - Note, the orange line is '$z$' or $\\mathbf{w} \\cdot \\mathbf{x}^{(i)} + b$  above. It does not match the line in a linear regression model.\n",
    "Further improve these results by applying a *threshold*. \n",
    "- Tick the box on the 'Toggle 0.5 threshold' to show the predictions if a threshold is applied.\n",
    "    - These predictions look good. The predictions match the data\n",
    "    - Now, add further data points in the large tumor size range (near 10), and re-run logistic regression.\n",
    "    - unlike the linear regression model, this model continues to make correct predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "Canvas(footer_visible=False, header_visible=False, toolbar=Toolbar(toolitems=[('Home', 'Reset original view', …",
      "image/png": "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8092795teg5i/6Zu3LhBQEAA3t7euLi4UK5cObp3787ly5efa/0i6ZGugIikUlRUFJGRkWbzbGxsTD9ffvkl1atX57333mP+/Pk8ePCA7t27U7ZsWUaOHGla5+zZszRr1owBAwaQOXNmDh48yJAhQwgLC6Nbt25m2//uu+8oW7YsU6dO5fr163zwwQf06tWLe/fuUa9ePbp06cLq1asZPXo0ZcuWpUGDBmbr9+zZk9dff53u3btz4MABPv30U+7fv8/nn3+e6HHOnz+fgQMH8n//938MGzaM0NBQJk6caPqP1cHBIdF1P/nkE6ZNm8Y777xDo0aNOHHiBOPHj+eff/5h/fr1ODs789tvvxEQEECmTJmYOnVqSp6CBC1YsICAgABatmzJRx99xNWrVxkzZgwHDhxg27Zt2NvbAxAQEMDq1at5//33qVixItu2beOdd9556vZ79uzJhQsXGDNmDK6urgQHB7Nt2zYePHhAhQoVmDJlCoMHD2bSpEmmT0pLlSqV4LYOHDhA06ZNKVKkCOPHj6dgwYKcOXOGo0ePpurYz58/T5EiRUzTd+/epWHDhoSFhfH+++9TuHBhNm/ezMCBAwkPD6dnz54AnDhxgrZt2+Lt7c28efOIiIhg8uTJ3L17l8KFC8fbz7Bhw6hXrx5ffPEFYWFhAIwePZpZs2bRq1cvPvnkEy5fvsy4ceM4fvw4v/76K5kyZWLFihV8+OGHDB06FF9fX8LCwjh69KjppDcoKIgOHTrQokULhg4dSubMmTlz5kySYxju37+Pv78/ISEhjBo1CldXV1asWEHPnj15+PAhXbp0MWvfq1cvWrVqxZIlS9i7dy8TJ07E3d09XjtL72Pbtm1kypTJLGQk5fz58/zf//2fqbvijh076NixI99++y3169d/6msxOc8XQKdOnTh69CijRo2iaNGirF27lqFDh8arp3fv3vz4448MHDgQX19f9u7dy5QpUwgKCuLrr782azt16lQqVqxIYGAgUVFRiV5B69atG+vXr6d3797Url2bsLAwdu7cydWrVylZsiTh4eGEhoYyaNAgnJycuHfvHsuXL6devXrs27cPJyenZD2WyZE/f34qVqzInj17TPOuXLlCwYIFGT9+PLlz5+by5cvMmjWLNm3amLqTTZ06lR49ehAVFWX6YCj2PfP27dtkyZKFUaNGkS9fPm7c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X78+0TukycshR44czJkzh3PnzvHo0SOKFSvGlClT4n1JqohISqgLloiIiIiIWIxuwysiIiIiIhajACIiIiIiIhajACIiIiIiIhajACIiIiIiIhajACIiIiIiIhajACIiIiIiIhaj7wFJp3LkyIGNjfKhiIiISHoQHR3N/fv3rV3GC0EBJJ2ysbFRABERERGRF47OcEVERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQEQk7V27BgsXJt1m4UJju4xMx/nYi3CcIiKSJhRARCRtXbsGdepAly4wY0bCbWbMMC6vUyfjnrTqOB97EY5TRETSjAKIiKSd2JPV48eN0wEB8U9aZ8wwzgdju4x40qrjfOxFOE4REUlTCiAikjaePFmNFfekNe7JaqyMdtKq43yxjlNERNKcAsgzGDp0KJ6enjg6OnLs2LFE2y1atIhKlSrh5eXFgAEDiIyMtGCVIlaycWP8k9VYAQFQtGj8k9VYx48b188IdJwv1nGKiEiaUwB5Bi1atGDjxo0UKlQo0TZBQUGMHz+ejRs3cvDgQa5du8bixYstWKWIlXTuDIGBiS8/ezbxZYGBxvUzAh2n0YtynCIikuYUQJ5BtWrVcHV1TbLN2rVradq0KQUKFMBgMNCtWzdWrlxpoQpFrGzAgKRPWhMSGGhcLyPRcSYuIx6niIikKQWQNHbhwgWzKyTu7u5cvHjRihWJWFhKTloz8smqjjO+jHycIiKSZhRALMBgMJh+j4mJsWIlIlYyYAAUKZJ0myJFMv7Jqo7zsRfhOEVEJE0ogKSxQoUKcf78edP0hQsXcHNzs2JFIlYwY0bSYwTAuDyx75XIKHScj70IxykiImlCASSNNW/enJ9++onr168TExPD/PnzadWqlbXLErGchG7NmpiEvlcio9BxxpeRj1NERNKMAsgzGDx4MGXLluXy5cu8/vrrVKxYEYB+/fqxYcMGADw8PBg+fDgNGzbEy8uL/Pnz06lTJ2uWLWI5KTlZjZURT1p1nInLiMcpIiJpyhASEqJBCemQg4MDNjbKh5KBLVwIXbokvrxIkaS78SxYkDFu3arjNHpRjlNEJBHR0dGEhoZau4wXgs5wRSRtNGoEZcok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TcLb25vZs2czd+5coqOjKVasGK1bt070NrxPGjlyJLa2towaNYrLly/j4uJCr169EmwbEBBAdHQ0TZo0YePGjfj5+cVr884777B161Z8fHy4d+8eW7ZsoXbt2vzyyy8MGDCAypUrkz17dlq1asW0adMSratXr14cOnSIdu3aYTAY6NChA3369OHnn382tRk0aBBXrlyhS5cu2NjY0K1bN9544w3u3LljajN58mTu3btH8+bNcXBwYNCgQWbLE9KuXTtOnz7NsGHDCAsLo1WrVvTu3dtsgPv8+fPp0aMHFStWxN3dnfHjxzN48GCz7UydOpWBAwfy1Vdf4erqSlBQENOnT6dbt274+fmRL18+hg0bxt27d5OsB4yBp2XLljRp0oRbt27RpEkTs6tf/fv35+7duwwaNIjr169TtmxZ1q5dS4kSJZ667cS0atWKH374gTp16hASEsI333yDo6MjEydOZODAgURFReHp6cm6devImzdvqvcjGZshJCQk7To7Sqo5ODg89dMWERGRxNSuXRsvLy8CAwOtXYpYwejRo1m9erXpOzzSu6CgIIoUKcLBgwdT/E3qlhIdHW26ZbI8G53hioiIvKDmzJmDvb29+tpLuta4cWPKlStn7TLEgtQFS0RE5AW0dOlSHj58CBhvxyqSXn399dd6rb5k1AUrnVIXLBEREZH0Q12wnh+d4YqIiIiIiMUogIiIiIiIiMUogIiIiIiIiMUogIiIiIiIiMUogIiIiIiIiMUogIiIiIiIiMUogIiIiIiIiMUogIiIiIiIiMUogDyD06dP06BBA7y9valbty4nTpyI1yYmJoaRI0fy6quv4ufnR9OmTTlz5owVqhURERERsT4FkGcQEBBA586dOXDgAAMGDKBfv37x2mzYsIGdO3eyfft2du7cSa1atRgzZowVqhURERERsT4FkFQKDg7m8OHDtGvXDoDmzZtz7tw5zp07F69teHg4YWFhxMTEEBoaSsGCBS1droiIiIhIumBr7QIyqkuXLuHi4oKtrfEhNBgMuLm5cfHiRQoXLmxq17hxY3bs2EGpUqWwt7fHxcWF9evXW6tsERERERGr0hWQZ2AwGMymY2Ji4rU5fPgwp06d4tixY5w4cYJatWoxZMgQS5UoIiIiIpKuKICkkqurK5cvXyYyMhIwho9Lly7h5uZm1m7ZsmXUqFEDR0dHbGxs6NChA9u3b7dGySIiIiIiVqcAkkr58+fH09OT5cuXA7B27Vrc3d3Nul8BFC5cmG3bthEREQHAxo0bKVu2rMXrFRERERFJDwwhISHx+w1Jspw6dYo+ffpw69YtHBwc+PzzzylTpgz9+vWjcePGNGnShPDwcIYMGcKuXbvInDkzzs7OTJ8+PV5QeZKDgwM2NsqHIiIiIulBdHQ0oaGh1i7jhaAAkk4pgIiIiIikHwogz4/OcEVERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQJ7B6dOnadCgAd7e3tStW5cTJ04k2O7o0aP4+/tTpUoVfHx8WLt2rYUrFRERERFJHwwhISEx1i4io2rWrBnt27enY8eOrFmzhlmzZvHbb7+ZtXnw4AF+fn58/vnn+Pr6EhkZSUhICPny5Uty2w4ODtjYKB+KiIiIpAfR0dGEhoZau4wXgs5wUyk4OJjDhw/Trl07AJo3b865c+c4d+6cWbuVK1dSpUoVfH19AbC1tX1q+BAREREReVEpgKTSpUuXcHFxwdbWFgCDwYCbmxsXL140a3fixAns7Oxo164d1atXp2fPnty4ccMaJYuIiIiIWJ0CyDMwGAxm0zEx8XuzRURE8PvvvzN9+nS2b9+Om5sbgwcPtlSJIiIiIiLpigJIKrm6unL58mUiIyMBY/i4dOkSbm5uZu3c3d2pXr06BQsWxGAw0KZNGw4cOGCNkkVERERErE4BJJXy58+Pp6cny5cvB2Dt2rW4u7tTuHBhs3avv/46Bw8e5O7duwBs2rSJV155xeL1ioiIiIikB7oL1jM4deoUffr04datWzg4OPD5559TpkwZ+vXrR+PGjWnSpAkA3377LTNmzCBTpkwULFiQwMBAXF1dk9y27oIlIiIikn7oLljPjwJIOqUAIiIiIpJ+KIA8PzrDFRERERERi1EAERERERERi1EAERERERERi1EAERERERERi1EAERERERERi1EAERERERERi1EAERERERERi1EAERERERERi3npAsiff/5p7RJERERERF5aL10Aadu2LRUqVGDcuHGcOXPG2uWIiIiIiLxUXroAcvLkSYYOHcqePXuoXLkyDRs25JtvviEkJMTapYmIiIiIvPAMISEhMdYuwlouXrzI999/z/LlywkKCqJRo0Z06NCBBg0aYDAYrFqbg4MDNjYvXT4UERERSZeio6MJDQ21dhkvhJf6DNfNzY0qVapQuXJloqOjOXbsGO+++y5eXl5s27bN2uWJiIiIiLxwbK1dgDWcPn2ab7/9lhUrVhAaGkqrVq34+eef8fb2JiIigsmTJ9O7d2+OHTtm7VKTzfcHa1cgIi+zXS2tXYGIiGQUL10XrNdee42///6bWrVq8eabb+Lv74+dnZ1Zm+vXr1OqVClu375tpSpT3gXL8HkaFiMi8hQxva1dgYhI2lIXrOfnpbsC0qxZM5YsWYKLi0uibQoUKGDV8CEiIiIi8qJ66QJIQECAtUsQEREREXlpvdSD0EVERERExLJeuisgL6pXnaxdgYiIiIjI0710g9AzCn0PiIiIiEj6oUHoz4/OcEVERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQERERERExGIUQJ7B6dOnadCgAd7e3tStW5cTJ04k2jYsLIyqVatSu3ZtyxUoIiIiIpLOKIA8g4CAADp37syBAwcYMGAA/fr1S7TtJ598QuXKlS1YnYiIiIhI+qMAkkrBwcEcPnyYdu3aAdC8eXPOnTvHuXPn4rXduXMnp0+fNrUVEREREXlZKYCk0qVLl3BxccHW1hYAg8GAm5sbFy9eNGt3//59hg8fzrRp06xRpoiIiIhIuqIA8gwMBoPZdExMTLw2o0aNonv37hQsWNBSZYmIiIiIpFuGkJCQ+GfN8lTBwcF4e3tz5swZbG1tiYmJoVSpUvz2228ULlzY1M7Pz4/Q0FAAwsPDCQkJoWjRouzevTvJ7Ts4OGBjo3woIiIikh5ER0ebzunk2egMN5Xy58+Pp6cny5cvB2Dt2rW4u7ubhQ8wjv84cuQIR44cYd68eZQtW/ap4UNERERE5EWlAPIMAgMDWbBgAd7e3kyfPp2ZM2cC0K9fPzZs2GDl6kRERERE0h91wUqn1AVLREREJP1QF6znR2e4IiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogz+D06dM0aNAAb29v6taty4kTJ+K12bZtG6+99hpVq1bF19eXTz75hJiYGCtUKyIiIiJifQogzyAgIIDOnTtz4MABBgwYQL9+/eK1cXR0ZN68eezZs4ctW7bw559/snLlSitUKyIiIiJifQogqRQcHMzhw4dp164dAM2bN+fcuXOcO3fOrF2FChXw8PAAIGvWrHh6ehIUFGThakVERERE0gcFkFS6dOkSLi4u2NraAmAwGHBzc+PixYuJrnPt2jXWrFlD/fr1LVWmiIiIiEi6ogDyDAwGg9l0UmM77t69S/v27enfvz9eXl5pXJmIiIiISPqkAJJKrq6uXL58mcjISMAYPi5duoSbm1u8tqGhobRu3ZrGjRvTt29fS5cqIiIiIpJuKICkUv78+fH09GT58uUArF27Fnd3dwoXLmzW7t69e7Ru3Zq6desydOhQa5QqIiIiIpJuGEJCQnRP2FQ6deoUffr04datWzg4OPD5559TpkwZ+vXrR+PGjWnSpAlTpkxh4sSJlC5d2rTe66+/zuDBg5PctoODAzY2yociIiIi6UF0dDShoaHWLuOFoACSTimAiIiIiKQfCiDPj85wRURERETEYhRARERERETEYhRARERERETEYhRARERERETEYhRARERERETEYhRARERERETEYhRARERERETEYhRARERERETEYhRARERERETEYhRARERERETEYmytXYCIiIiIJO7u3bvcuXPH2mW8dGxtbXFycsLGRp/XP28KICIiIiLp1PXr1zEYDLi5uWEwGKxdzkvl3r17XLt2DRcXF2uX8sJRpBMRERFJp8LDw8mfP3/ywse1a7BwYdJtFi40tpOnsre3JzIy0tplvJAUQEREREQyumvXoE4d6NIFZsxIuM2MGcbldeoohIhVKYCIiIiIZGSx4eP4ceN0QED8EDJjhnE+GNtZOYSMHj2awYMHA7B27VqGDBlilTqCgoL48ssvrbLvl5kCiIiIiEhG9WT4iBU3hMQNH7HSQQiJ1bx5cyZPnmyVfSuAWIcCiIiIiEhGtXFj/PARKyAAihaNHz5iHT9uXD+FDAYDEyZMoEqVKhQtWpRNmzYxfPhwKlasSLly5Th69CgAV69epU6dOnh7e1OuXDn69+9PTExMvO0tWLCA1q1bm6ZHjBhB8eLFqVq1KkOGDMHHxweArVu34uXlRZ8+fahQoQLlypVj//79AERGRtKwYUN8fHwoV64cHTt25MGDB6btN2zYkA4dOuDp6YmPjw9nzpwBoFevXhw7dgwvLy+aN2+e4sdCUkcBRERERCSj6twZAgMTX372bOLLAgON66dCzpw52bt3L5MmTaJFixZUr16dgwcP0rlzZ8aNGweAo6Mj69at48CBA/z999+cOXOGVatWJbnddevW8dNPP3H48GF27drF6dOnzZYfPXqUbt26cfjwYfr168eIESMAyJQpE8uWLWP//v38888/5MyZkzlz5pjW27NnDxMnTuTIkSPUq1ePSZMmATB37lzKli3LoUOHWLt2baoeC0k5BRARERGRjGzAgKRDSEICA43rpVK7du0AqFSpEjY2Nvj7+wPg7e1turoQHR3NsGHDqFChAhUrVmT//v0cOnQoye1u2bKFtm3bkiNHDmxsbOj8REAqVaqU6YqIr6+vKaDExMQwffp0KlasSPny5Vm/fr3ZvqpXr07hwoXjrSfWoQAiIiIiktGlJIQ8Y/gA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dBERERERsRhdAREREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYtRABEREREREYuxtXYBL4rK63Jw65HynIikb3myRLOv2f3nus0cOXJgY6P3PxFJ36Kjo7l///m+/0nqKIA8J7ce2XAzXP8Bi8jLx8bGRgFERESSTf9jiIiIiIiIxSiAiIiIiIiIxagLloiIWFynTp24c+eOtcuIJ1euXCxevNjaZYiIvNAUQERExOLu3LnD2rVrrV1GPM2bN7d2CSIiLzx1wRIREREREYtRABEREREREYtRAJHn70MP+Lg0jPeC0aXgl4lps4/L/zyfbf29Fn4YknSbf7fCsV8fT4dchul1Uraff7fCgOzGx2VcBfi0KpzdncJiLeiPubB5+vPf7hct4cyupNv8NBpWDTb+npzn52YQDMmX8LItM2HjhJRWKfLceXl54eXlRdmyZbG1tTVNt2vX7rnuZ8GCBbRu3TrF612/fp1GjRpRokQJXnnlFXbs2JFgu6CgILP6vby8OH36dIJtV69ezd69e03TW7duxcfHJ8W1JVdQUBD58iXyXpCEpOp62jbXrl1Lr169nrqPR48e0bRpU8qXL8+7777LggUL+Pfff1Nca0a1du1ahgx5ynv5Uxw+fJgmTZo8p4rEmjQGRNLGOyuh4CvGE/VPykKpuuBRxdpVJax8c+NPUv7dCuH3oGwD47RjQXhvS8r35VIW3t9v/H3bHFjcDUYdS/l2EhMVCZme0591zaf/h5piQXvhYQgU9U3+Osl5fpJSo6cxENd6F7LlTP12RJ7RoUOHAOMJrY+Pj2k6vXj//fd59dVX2bhxI/v27aN169acPn0aW9v47ymOjo7Jqn/16tX4+PhQpUrK3/8jIyMT3Hd6M2LECNatW/fUdgcPHuTs2bMcPXoUgNq1a5MvXz5KliyZov1FR0cDJPndO1FRUWTKlClF203I83wOmjdv/sxjrCpUqICtrS1bt26ldu3az6UusQ5dAZG05VgQnErBrXPG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JHh8nTp1okuXLnz//ff07duX4sWLp+jxWbp0KQMHDjR1m7K3t2fu3LlERUXxzjvvEBERQXR0NH5+fjRu3Ng0gD8h+fPnZ/HixXTs2JGoqCgcHR0T7FpVvnx5PvjgA/z8/HB2dsbf3z/RbTZt2pQxY8aYukv179+fNm3a4OXlhaura5In1T169GDQoEFMnjyZ8ePH06lTJ27evEnt2rUxGAxERkby9ttvJxrukpI7d27WrVvHkCFDeO+994iIiMDd3Z3Vq1dToUIFhg4dyquvvoqLiwt169ZN8nWf0udgyZIlTJs2zXT1afLkyfG237hxY44cOYKvry8Gg4Hy5cszZ86cZB3bxo0badWqVYofE0lfDCEhIcm/1iiJKrbKgZvhuqCUroWFQlYH4yfjc5tDpTZQrbu1q0qe2Nqjo2Fpd2MQaT7W2lWlXFio8W5dQ/c8HtOS1q4cg297wcD4XRFeRnntojndKvS5btPBwSHJW4JK6oWGhuLg4EB4eDjNmzenTZs2dO/e/anLxHL69OlDnTp1aNOmjbVLSbbY1w4Y7zr133//mY0DSa8ePXpE5cqV2bx5c6q+7yU6Otp01UWsS1dA5OXxWT2IDDd2wSpdD17tYu2Kkm/hW8Y7b0U8hEKVoH7y+lqnO1kdjFcobp41jhGyhNsXEr6qI5IB1KtXj/DwcMLCwqhXrx5dunRJ1jKxnNi7bWUk77//Pn/++SePHj2iSJEiGea2tmfPnmXChAmpCh+SvugKyHOiKyAikhHoCoiIvKx0BST90P8YIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMQogIiIiIiJiMfoekOckT5Zoa5cgIvJUafFeFR2t9z8RSf/0XpV+6HtARERERETEYtQFS0RERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELEYBRERERERELOb/AWV1NwtejcdnAAAAAElFTkSuQmCC",
      "text/html": "\n            <div style=\"display: inline-block;\">\n                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n                    Figure\n                </div>\n                <img src='' width=800.0/>\n            </div>\n        ",
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "7fb097bd9f7b4aadb77f7c1ea69c2864"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.close('all') \n",
    "addpt = plt_one_addpt_onclick( x_train,y_train, w_in, b_in, logistic=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Congratulations!\n",
    "You have explored the use of the sigmoid function in logistic regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}